/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOKardex;
import pe.com.cotelasa.scp.dominio.common.Constantes;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioKardex;
import pe.com.cotelasa.scp.entidad.GuiaRemision;
import pe.com.cotelasa.scp.entidad.Kardex;

/**
 *
 * @author WINDOWS 7
 */
@Service
public class ServicioKardexImpl implements IServicioKardex, Serializable {

    @Inject
    private IDAOKardex daoKardex;

    @Override
    public ResultadoServicio guardarKardex(Kardex kardex) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //banco.setId(5);
            kardex.setEstadoRegistro("" + ESTADO_REGISTRO.ACTIVO.getValor());
            daoKardex.insertar(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarKardex(Kardex kardex) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoKardex.actualizar(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio guardarListaKardex(List<Kardex> listaKardex) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoKardex.insertarColeccion(listaKardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public int buscarCantidadKardex(Kardex kardex) throws ServiceException {
        try {
            return daoKardex.buscarCantidadKardex(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public int buscarCantidadKardexActivos(Kardex kardex) throws ServiceException {
        try {
            return daoKardex.buscarCantidadKardexActivos(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Kardex buscarUltimoKardex(Kardex kardex) throws ServiceException {
        try {
            return daoKardex.buscarUltimoKardex(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Kardex> listaKardexPorFiltro(Kardex kardex, Date fecInicio, Date fecFinal) throws ServiceException {
        try {
            if (kardex.getTiMovimiento() == null) {
                kardex.setTiMovimiento("");
            }
            if (kardex.getIdGuiaRemision() == null) {
                kardex.setIdGuiaRemision(new GuiaRemision());
            }
            return daoKardex.listaKardexPorFiltro(kardex, fecInicio, fecFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Kardex> buscarKardexPorOp(Kardex kardex) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idOrdenPedido", kardex.getIdOrdenPedido().getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Kardex buscarKardexEPorKardexS(Kardex kardex) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idOrdenPedido", kardex.getIdOrdenPedido().getId());
            parametro.put("tiMovimiento", Constantes.TipoMovimiento.ENTRADA);
            parametro.put("partidaLote", kardex.getPartidaLote());
            parametro.put("articulo", kardex.getArticulo().getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            List<Kardex> lista = (List<Kardex>) daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
            System.out.println(lista);
            if (lista.isEmpty()) {
                return null;
            } else {
                return lista.get(0);
            }

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Kardex buscarKardexSPorKardexE(Kardex kardex) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idOrdenPedido", kardex.getIdOrdenPedido().getId());
            parametro.put("tiMovimiento", Constantes.TipoMovimiento.SALIDA);
            parametro.put("partidaLote", kardex.getPartidaLote());
            parametro.put("articulo", kardex.getArticulo().getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            List<Kardex> lista = (List<Kardex>) daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
            System.out.println(lista);
            if (lista.isEmpty()) {
                return null;
            } else {
                return lista.get(0);
            }

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Kardex buscarKardexSalidaMasAntiguo(Kardex kardex) throws ServiceException {
        try {
            return daoKardex.buscarKardexSalidaMasAntiguo(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Kardex> buscarKardexSalidaPorOpyCat(Kardex kardex) throws ServiceException {
        try {
            return daoKardex.buscarKardexSalidaPorOpyCat(kardex);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    
    @Override
    public Kardex buscarKardex(Kardex kardex) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("id.idArticulo", kardex.getId().getIdArticulo());
            parametro.put("id.idSede", kardex.getId().getIdSede());
            parametro.put("id.nuSecKardex", kardex.getId().getNuSecKardex());
            parametro.put("id.partidaLote", kardex.getId().getPartidaLote());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            List<Kardex> lista = (List<Kardex>) daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
            System.out.println(lista);
            if (lista.isEmpty()) {
                return null;
            } else {
                return lista.get(0);
            }

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Kardex> buscarKardexPorVenta(int idVentaFacturacion) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idVentaFacturacion.coddocventa", idVentaFacturacion);
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Kardex> buscarKardexPorGuia(int idGuiaRemision) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idGuiaRemision.id", idGuiaRemision);
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoKardex.obtenerColeccionEntidadPorFiltros(Kardex.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
}
